class Solution {
public:
    int tribonacci(int n) {
        if (n == 0) return 0;
        if (n == 1) return 1;
        if (n == 2) return 1;
        vector<int> dp({0, 1, 1});
        for (int i = 3; i <= n; ++i) {
            dp.push_back(dp[i - 3] + dp[i - 2] + dp[i - 1]);
        }
        return *dp.rbegin();
    }
};